// Copyright Epic Games, Inc. All Rights Reserved.  // 版权声明

#pragma once  // 头文件保护宏，防止重复包含

#include "Abilities/GameplayAbilityTargetTypes.h"  // 包含父类定义的头文件

#include "LyraGameplayAbilityTargetData_SingleTargetHit.generated.h"  // 包含UE生成的反射代码头文件

class FArchive;  // 前向声明FArchive类
struct FGameplayEffectContextHandle;  // 前向声明FGameplayEffectContextHandle结构体

/** Game-specific additions to SingleTargetHit tracking */  // 注释：游戏特定的单目标命中追踪扩展
USTRUCT()  // UE反射宏，声明这是一个结构体
struct FLyraGameplayAbilityTargetData_SingleTargetHit : public FGameplayAbilityTargetData_SingleTargetHit  // 定义结构体，继承自FGameplayAbilityTargetData_SingleTargetHit
{
	GENERATED_BODY()  // UE反射宏，生成结构体所需代码

	FLyraGameplayAbilityTargetData_SingleTargetHit()  // 构造函数
		: CartridgeID(-1)  // 初始化成员变量CartridgeID为-1
	{ }

	/**
	 * 将目标数据添加到效果上下文
	 * @param Context 效果上下文句柄
	 * @param bIncludeActorArray 是否包含演员数组
	 */
	virtual void AddTargetDataToContext(FGameplayEffectContextHandle& Context, bool bIncludeActorArray) const override;  // 重写虚函数，将目标数据添加到效果上下文

	/** ID to allow the identification of multiple bullets that were part of the same cartridge */  // 注释：用于识别同一弹壳中多个子弹的ID
	UPROPERTY()  // UE反射宏，声明该成员变量应被反射系统识别
	int32 CartridgeID;  // 整型成员变量，表示弹壳ID

	/**
	 * 网络序列化函数
	 * @param Ar 存档对象
	 * @param Map 包映射
	 * @param bOutSuccess 输出参数，表示序列化是否成功
	 * @return 总是返回true
	 */
	bool NetSerialize(FArchive& Ar, class UPackageMap* Map, bool& bOutSuccess);  // 网络序列化函数声明

	virtual UScriptStruct* GetScriptStruct() const override  // 重写虚函数，获取脚本结构体
	{
		return FLyraGameplayAbilityTargetData_SingleTargetHit::StaticStruct();  // 返回当前结构体的静态结构体指针
	}
};

template<>  // 模板特化
struct TStructOpsTypeTraits<FLyraGameplayAbilityTargetData_SingleTargetHit> : public TStructOpsTypeTraitsBase2<FLyraGameplayAbilityTargetData_SingleTargetHit>  // 为FLyraGameplayAbilityTargetData_SingleTargetHit定义结构体操作类型特征
{
	enum  // 枚举定义
	{
		WithNetSerializer = true	// For now this is REQUIRED for FGameplayAbilityTargetDataHandle net serialization to work  // 注释：启用网络序列化器，目前这是FGameplayAbilityTargetDataHandle网络序列化工作所必需的
	};
};